package com.ruoyi.onlyoffice.service;


import com.alibaba.fastjson.JSONObject;
import com.ruoyi.onlyoffice.domain.OnFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * oo存档文件Service接口
 * 
 * @author ruoyi
 * @date 2023-08-25
 */
public interface IOnFileService 
{
    /**
     * 查询oo存档文件
     * 
     * @param fileId oo存档文件ID
     * @return oo存档文件
     */
    public OnFile selectOnFileById(String fileId);

    /**
     * 根据报告编号获取最大版本号
     */
    public String selectMaxVersion(String reportId);

    /**
     * 查询最新报告编号关联版本号
     */
    public OnFile selectNewVersion(String reportId);

    /**
     * 查询oo存档文件列表
     * 
     * @param onFile oo存档文件
     * @return oo存档文件集合
     */
    public List<OnFile> selectOnFileList(OnFile onFile);

    /**
     * 根据reportId查询文档列表
     */
    public List<OnFile> selectOnFileByReportId(String reportId);

    /**
     * 新增oo存档文件
     * 
     * @param onFile oo存档文件
     * @return 结果
     */
    public int insertOnFile(OnFile onFile);

    /**
     * 修改oo存档文件
     * 
     * @param onFile oo存档文件
     * @return 结果
     */
    public int updateOnFile(OnFile onFile);

    /**
     * 批量删除oo存档文件
     * 
     * @param fileIds 需要删除的oo存档文件ID
     * @return 结果
     */
    public int deleteOnFileByIds(String[] fileIds);

    /**
     * 删除oo存档文件信息
     * 
     * @param fileId oo存档文件ID
     * @return 结果
     */
    public int deleteOnFileById(String fileId);

    /**
     * 保存文件
     * @param bytes
     * @param fileType
     * @return
     * @throws Exception
     */
    public String saveFile(byte[] bytes, String fileType) throws Exception;

    /**
     * 删除文件
     * @param id
     */
    public void removeFile(String id);

    /**
     * 下载文件
     * @param id
     * @param isBrowser
     * @param response
     */
    public void download(String id,String isBrowser, HttpServletResponse response);

    /**
     * 打开only office
     *
     * @param map                  文件数据信息
     * @param map{
     *           必填 fileId
     *           必填 fileName
     *           必填 fileType
     *           必填 fileSize
     *           可用携带其它值
     * }
     * @param mode                 打开方式  edit/view
     * @param collaborativeEditing 是否协同编辑
     * @return 配置信息
     */
    public Map openDocument(Map<String, Object> map, String mode, boolean collaborativeEditing, String userId);

    /**
     * 获取打开文档时的唯一key
     *
     * @param id
     * @return
     */
    public String getKey(String id);

    /**
     * 文件保存
     */
    public String save(String key, String userId);

    /**
     * 获取文件id
     * @return
     */
    String getFileId(String key, String userId);

    /**
     * 当文件没有人使用时，清空文件信息
     */
    void close(JSONObject jsonObject);

    /**
     * redis中存放文件使用人数
     *
     * @param key
     * @param users
     */
    int iskey(String key, Integer users);

    /**
     * 获取文档是使用人数
     * @return
     */
    int getUserNum(String key);

    /**
     * 获取历史数量上限
     *
     * @return
     */
    Integer getHistNum();

    /**
     * 处理保存结果
     *
     * @param jsonObject 信息
     */
    void handlerStatus(JSONObject jsonObject) throws Exception;

    /** 更新报告中的reportId */
    int updateFileIdByReportId(OnFile onFile);
}
